commonlibsse_ng\re\o/
OldMessageBoxCallback.rs

1use core::ptr::NonNull;
2
3use crate::re::BSIntrusiveRefCounted::BSIntrusiveRefCounted;
4use crate::re::IMessageBoxCallback::{IMessageBoxCallback, IMessageBoxCallbackVtbl, Message};
5use crate::re::offsets_rtti::RTTI___OldMessageBoxCallback;
6use crate::re::offsets_vtable::VTABLE___OldMessageBoxCallback;
7use crate::rel::id::VariantID;
8
9pub struct OldMessageBoxCallback {
10    __base: IMessageBoxCallback,
11    callback: Option<NonNull<fn(Message)>>,
12}
13const _: () = assert!(core::mem::size_of::<OldMessageBoxCallback>() == 0x18);
14
15impl OldMessageBoxCallback {
16    /// Address & Offset of the runtime type information (RTTI) identifier.
17    pub const RTTI: VariantID = RTTI___OldMessageBoxCallback;
18
19    /// Address & Offset of the virtual function table.
20    pub const VTABLE: [VariantID; 1] = VTABLE___OldMessageBoxCallback;
21
22    /// Create a new callback and return a raw pointer suitable for passing to C++
23    #[inline]
24    pub const fn new(callback: fn(Message)) -> Self {
25        let __base =
26            IMessageBoxCallback { vtable: &VTABLE, __base: BSIntrusiveRefCounted::new(), unk0C: 0 };
27        Self {
28            __base,
29            callback: NonNull::new((&callback) as *const fn(Message) as *mut fn(Message)),
30        }
31    }
32}
33
34static VTABLE: IMessageBoxCallbackVtbl = IMessageBoxCallbackVtbl {
35    CxxDrop: |this| unsafe {
36        let _this = &mut *this.cast::<OldMessageBoxCallback>();
37    },
38    Run: |this, msg| {
39        let this = unsafe { &mut *this.cast::<OldMessageBoxCallback>() };
40        if let Some(callback) = this.callback.as_ref() {
41            (unsafe { callback.as_ref() })(msg);
42        }
43    },
44};